﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ForrajeriaDB;
using System.Data;
using System.Data.SqlClient;

namespace ForrajeriaDAL
{
    public class DetallePedidoClienteDAL : AccesoDAL, InterfazDAL<DetallePedidoClienteMO>
    {
        private static string insert = "DetallePedidoCliente_INSERT";
        private static string getByPedido = "DetallePedidoCliente_getByPedido";
         #region Singleton
        private static DetallePedidoClienteDAL instancePedido;

        private DetallePedidoClienteDAL()
            : base()
        {

        }

        public static DetallePedidoClienteDAL getInstance
        {
            get 
            {
                if (instancePedido == null)
                {
                    instancePedido = new DetallePedidoClienteDAL();
                }
                return instancePedido;
            }
        }
        #endregion 
        public List<DetallePedidoClienteMO> GetAll()
        {
            throw new NotImplementedException();
        }

        public void Adicionar(DetallePedidoClienteMO item)
        {
            try
            {
                

                SqlCommand cmd = new SqlCommand(insert, getConexion());
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.Add("@nroPedido", SqlDbType.Int).Value = item.NroPedidos;
                cmd.Parameters.Add("@nroDetalle", SqlDbType.Int).Value = item.NroDetalle;
                cmd.Parameters.Add("@codigo_Forraje", SqlDbType.Int).Value = item.CodigoForraje;
                cmd.Parameters.Add("@cantidad", SqlDbType.Float).Value = item.Cantidad;
                cmd.Parameters.Add("@precio", SqlDbType.Float).Value = item.Precio;
                

                opencon();

                cmd.ExecuteNonQuery();

            }
            catch (Exception ex)
            {
                throw ex;
            }

            finally
            {
                closecon();
            }

        }

        public void Eliminar(DetallePedidoClienteMO item)
        {
            throw new NotImplementedException();
        }

        public void Actualizar(DetallePedidoClienteMO nuevoItem, DetallePedidoClienteMO origItem)
        {
            throw new NotImplementedException();
        }

        public List<DetallePedidoClienteMO> getByNroPedido(int nroPedido)
        {
            SqlCommand cmd = new SqlCommand(getByPedido, getConexion());
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Add("@idPedido", SqlDbType.Int).Value = nroPedido;

            SqlDataReader rea;

            try
            {
                
                opencon();
                rea = cmd.ExecuteReader();
                List<DetallePedidoClienteMO> reto = new List<DetallePedidoClienteMO>();
                while (rea.Read())
                {
                    DetallePedidoClienteMO aux = new DetallePedidoClienteMO();

                    aux.NroPedidos= (int)rea["nroPedido"];
                    aux.NroDetalle =(int)rea["nroDetalle"];
                    aux.CodigoForraje= (int)rea["codigo_Forraje"];
                    aux.Cantidad = (double)rea["cantidad"];
                    aux.Precio = (double)rea["precio"];

                    reto.Add(aux);
                }
                rea.Close();
                return reto;
            }

            catch(SqlException ex)
            {
                throw new Exception("Error SQL: " + ex.Message);
            }
              
            catch (Exception ex)
            {
                throw ex;
            }

            finally
            {
               
                closecon();
            }

            
        }

        public DataTable DetalleReporte(int pedido)
        {
            string sql = "";
            sql = "select dp.nroDetalle as 'Nro',f.nombreForraje as 'Forraje', dp.cantidad as 'Cantidad', '$' + convert(varchar(30),dp.precio)as 'Precio'"
                + " FROM DetallePedidoCliente dp "
                + " left join Forraje f on dp.codigo_Forraje = f.codigoForraje"
                + " where dp.nroPedido = @pedido";
                
                
            try
            {
                DataTable dt = new DataTable();

                SqlCommand cmd = new SqlCommand();


                
                cmd.Connection = (getConexion());

                cmd.CommandText = sql;
                cmd.Parameters.Add("@pedido", SqlDbType.Int).Value = pedido;
                cmd.CommandType = CommandType.Text;
                SqlDataAdapter da = new SqlDataAdapter(cmd);

                opencon();
                da.Fill(dt);
                closecon();
                return dt;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                closecon();
            }
            
        }

    
    
    }
}
